package com.moyoutian.leetcode;

/**
 * 83. 删除排序链表中的重复元素
 * <p>
 * 存在一个按升序排列的链表，给你这个链表的头节点 head ，请你删除所有重复的元素，使每个元素 只出现一次 。
 * <p>
 * 返回同样按升序排列的结果链表。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：head = [1,1,2]
 * 输出：[1,2]
 * <p>
 * 示例 2：
 * <p>
 * 输入：head = [1,1,2,3,3]
 * 输出：[1,2,3]
 * <p>
 * <p>
 * <p>
 * 提示：
 * <p>
 * 链表中节点数目在范围 [0, 300] 内
 * -100 <= Node.val <= 100
 * 题目数据保证链表已经按升序排列
 * <p>
 * 通过次数303,679
 * 提交次数563,827
 */
public class Demo83 {

    public static void main(String[] args) {

        int[] ints = {1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 6, 7};

        ListNode head = new ListNode(ints[0]);
        ListNode temp = head;
        for (int i = 1; i < ints.length; i++) {
            temp.next = new ListNode(ints[i]);
            temp = temp.next;
        }

        deleteDuplicates(head);
        System.out.println("Demo83.main");
    }

    public static class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }


    public static ListNode deleteDuplicates(ListNode head) {
        //不用做null值判断，因为while条件带了判断
        ListNode tempNode = head;
        while (tempNode != null) {
            //如果下一个元素不为null，且当前元素的值等于下一个元素的值,直到不相等在位移到下一个元素
            while (tempNode.next != null && tempNode.val == tempNode.next.val) {
                //当前元素的下一个值，指向下下个元素
                tempNode.next = tempNode.next.next;
            }
            tempNode = tempNode.next;
        }
        return head;
    }

}
